diff --git a/user_guide/general/styleguide.html b/user_guide/general/styleguide.html
index 43385d0..faa1a8f 100644
--- a/user_guide/general/styleguide.html
+++ b/user_guide/general/styleguide.html
@@ -1,649 +1,649 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>Style Guide : CodeIgniter User Guide</title>
-
-<style type='text/css' media='all'>@import url('../userguide.css');</style>
-<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />
-
-<style type="text/css" media="screen">
-	code {
-		white-space: pre;
-	}
-</style>
-
-<script type="text/javascript" src="../nav/nav.js"></script>
-<script type="text/javascript" src="../nav/prototype.lite.js"></script>
-<script type="text/javascript" src="../nav/moo.fx.js"></script>
-<script type="text/javascript" src="../nav/user_guide_menu.js"></script>
-
-<meta http-equiv='expires' content='-1' />
-<meta http-equiv= 'pragma' content='no-cache' />
-<meta name='robots' content='all' />
-<meta name='author' content='ExpressionEngine Dev Team' />
-<meta name='description' content='CodeIgniter User Guide' />
-
-</head>
-<body>
-
-<!-- START NAVIGATION -->
-<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
-<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
-<div id="masthead">
-<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
-<tr>
-<td><h1>CodeIgniter User Guide Version 1.7</h1></td>
-<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
-</tr>
-</table>
-</div>
-<!-- END NAVIGATION -->
-
-
-<!-- START BREADCRUMB -->
-<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
-<tr>
-<td id="breadcrumb">
-<a href="http://codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
-<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
-Style Guide
-</td>
-<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
-</tr>
-</table>
-<!-- END BREADCRUMB -->
-
-<br clear="all" />
-
-
-<!-- START CONTENT -->
-<div id="content">
-
-
-<h1>General Style and Syntax</h1>
-
-<p>The following page describes the coding rules use adhere to when developing CodeIgniter.</p>
-
-
-<h2>Table of Contents</h2>
-<ul class="minitoc">
-	<li><a href="#php_closing_tag">PHP Closing Tag</a></li>
-	<li><a href="#class_and_method_naming">Class and Method Naming</a></li>
-	<li><a href="#variable_names">Variable Names</a></li>
-	<li><a href="#commenting">Commenting</a></li>
-	<li><a href="#constants">Constants</a></li>
-	<li><a href="#true_false_and_null">TRUE, FALSE, and NULL</a></li>
-	<li><a href="#logical_operators">Logical Operators</a></li>
-	<li><a href="#comparing_return_values_and_typecasting">Comparing Return Values and Typecasting</a></li>
-	<li><a href="#debugging_code">Debugging Code</a></li>
-	<li><a href="#whitespace_in_files">Whitespace in Files</a></li>
-	<li><a href="#compatibility">Compatibility</a></li>
-	<li><a href="#class_and_file_names_using_common_words">Class and File Names using Common Words</a></li>
-	<li><a href="#database_table_names">Database Table Names</a></li>
-	<li><a href="#one_file_per_class">One File per Class</a></li>
-	<li><a href="#whitespace">Whitespace</a></li>
-	<li><a href="#line_breaks">Line Breaks</a></li>
-	<li><a href="#code_indenting">Code Indenting</a></li>
-	<li><a href="#bracket_spacing">Bracket and Parenthetic Spacing</li>
-	<li><a href="#localized_text_in_control_panel">Localized Text in Control Panel</a></li>
-	<li><a href="#private_methods_and_variables">Private Methods and Variables</a></li>
-	<li><a href="#php_errors">PHP Errors</a></li>
-	<li><a href="#short_open_tags">Short Open Tags</a></li>
-	<li><a href="#one_statement_per_line">One Statement Per Line</a></li>
-	<li><a href="#strings">Strings</a></li>
-	<li><a href="#sql_queries">SQL Queries</a></li>
-	<li><a href="#default_function_arguments">Default Function Arguments</a></li>
-	<li><a href="#overlapping_tag_parameters">Overlapping Tag Parameters</a></li>
-</ul>
-
-		<h2><a name="php_closing_tag"></a>PHP Closing Tag</h2>
-		<div class="guidelineDetails">
-			<p>The PHP closing tag on a PHP document <strong>?&gt;</strong> is optional to the PHP parser.  However, if used, any whitespace following the closing tag, whether introduced 
-				by the developer, user, or an FTP application, can cause unwanted output, PHP errors, or if the latter are suppressed, blank pages.  For this reason, all PHP files should
-				<strong>OMIT</strong> the closing PHP tag, and instead use a comment block to mark the end of file and it's location relative to the application root.
-				This allows you to still identify a file as being complete and not truncated.</p>
-<code><strong>INCORRECT</strong>:
-&lt;?php
-
-echo "Here's my code!";
-
-?&gt;
-
-<strong>CORRECT</strong>:
-&lt;?php
-
-echo "Here's my code!";
-
-/* End of file myfile.php */
-/* Location: ./system/modules/mymodule/myfile.php */
-</code>
-		</div>
-
-	
-		<h2><a name="class_and_method_naming"></a>Class and Method Naming</h2>
-		<div class="guidelineDetails">
-			<p>Class names should always have their first letter uppercase, and the constructor method should match identically.  Multiple words should be separated with an underscore, and not CamelCased.  All other class methods should be entirely lowercased and named to clearly indicate their function, preferably including a verb.  Try to avoid overly long and verbose names.</p>
-
-	<code><strong>INCORRECT</strong>:
-class superclass
-class SuperClass
-
-<strong>CORRECT</strong>:
-class Super_class</code>
-
-			<p>Notice that the Class and constructor methods are identically named and cased:</p>
-
-	<code>class Super_class {
-
-	function Super_class()
-	{
-
-	}
-}</code>
-
-			<p>Examples of improper and proper method naming:</p>
-
-	<code><strong>INCORRECT</strong>:
-function fileproperties()		// not descriptive and needs underscore separator
-function fileProperties()		// not descriptive and uses CamelCase
-function getfileproperties()		// Better!  But still missing underscore separator
-function getFileProperties()		// uses CamelCase
-function get_the_file_properties_from_the_file()	// wordy
-
-<strong>CORRECT</strong>:
-function get_file_properties()	// descriptive, underscore separator, and all lowercase letters</code>
-
-		</div>
-	
-	
-		<h2><a name="variable_names"></a>Variable Names</h2>
-		<div class="guidelineDetails">
-			<p>The guidelines for variable naming is very similar to that used for class methods.  Namely, variables should contain only lowercase letters, use underscore separators, and be reasonably named to indicate their purpose and contents. Very short, non-word variables should only be used as iterators in for() loops.</p>
-<code><strong>INCORRECT</strong>:
-$j = &apos;foo&apos;;		// single letter variables should only be used in for() loops
-$Str			// contains uppercase letters
-$bufferedText		// uses CamelCasing, and could be shortened without losing semantic meaning
-$groupid		// multiple words, needs underscore separator
-$name_of_last_city_used	// too long
-
-<strong>CORRECT</strong>:
-for ($j = 0; $j &lt; 10; $j++)
-$str
-$buffer
-$group_id
-$last_city
-</code>
-		</div>
-	
-	
-		<h2><a name="commenting"></a>Commenting</h2>
-		<div class="guidelineDetails">
-			<p>In general, code should be commented prolifically.  It not only helps describe the flow and intent of the code for less experienced programmers, but can prove invaluable when returning to your own code months down the line.  There is not a required format for comments, but the following are recommended.</p>
-
-			<p><a href="http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html#basics.docblock">DocBlock</a> style comments preceding class and method declarations so they can be picked up by IDEs:</p>
-
-<code>/**
- * Super Class
- *
- * @package	Package Name
- * @subpackage	Subpackage
- * @category	Category
- * @author	Author Name
- * @link	http://example.com
- */
-class Super_class {</code>
-
-<code>/**
- * Encodes string for use in XML
- *
- * @access	public
- * @param	string
- * @return	string
- */
-function xml_encode($str)</code>
-
-			<p>Use single line comments within code, leaving a blank line between large comment blocks and code.</p>
-
-<code>// break up the string by newlines
-$parts = explode("\n", $str);
-
-// A longer comment that needs to give greater detail on what is
-// occurring and why can use multiple single-line comments.  Try to
-// keep the width reasonable, around 70 characters is the easiest to
-// read.  Don't hesitate to link to permanent external resources
-// that may provide greater detail:
-//
-// http://example.com/information_about_something/in_particular/
-
-$parts = $this->foo($parts);
-</code>
-		</div>
-	
-	
-		<h2><a name="constants"></a>Constants</h2>
-		<div class="guidelineDetails">
-			<p>Constants follow the same guidelines as do variables, except constants should always be fully uppercase.  <em>Always use ExpressionEngine constants when appropriate, i.e. SLASH, LD, RD, PATH_CACHE, etc.</em></p>
-<code><strong>INCORRECT</strong>:
-myConstant	// missing underscore separator and not fully uppercase
-N		// no single-letter constants
-S_C_VER		// not descriptive
-$str = str_replace('{foo}', 'bar', $str);	// should use LD and RD constants
-
-<strong>CORRECT</strong>:
-MY_CONSTANT
-NEWLINE
-SUPER_CLASS_VERSION
-$str = str_replace(LD.'foo'.RD, 'bar', $str);
-</code>
-		</div>
-	
-	
-		<h2><a name="true_false_and_null"></a>TRUE, FALSE, and NULL</h2>
-		<div class="guidelineDetails">
-			<p><strong>TRUE</strong>, <strong>FALSE</strong>, and <strong>NULL</strong> keywords should always be fully uppercase.</p>
-<code><strong>INCORRECT</strong>:
-if ($foo == true)
-$bar = false;
-function foo($bar = null)
-
-<strong>CORRECT</strong>:
-if ($foo == TRUE)
-$bar = FALSE;
-function foo($bar = NULL)</code>
-		</div>
-	
-
-	
-		<h2><a name="logical_operators"></a>Logical Operators</h2>
-		<div class="guidelineDetails">
-			<p>Use of <strong>||</strong> is discouraged as its clarity on some output devices is low (looking like the number 11 for instance).
-				<strong>&amp;&amp;</strong> is preferred over <strong>AND</strong> but either are acceptable, and a space should always precede and follow <strong>!</strong>.</p>
-<code><strong>INCORRECT</strong>:
-if ($foo || $bar)
-if ($foo AND $bar)  // okay but not recommended for common syntax highlighting applications
-if (!$foo)
-if (! is_array($foo))
-
-<strong>CORRECT</strong>:
-if ($foo OR $bar)
-if ($foo && $bar) // recommended
-if ( ! $foo)
-if ( ! is_array($foo))
-</code>
-		</div>
-	
-	
-	
-		<h2><a name="comparing_return_values_and_typecasting"></a>Comparing Return Values and Typecasting</h2>
-		<div class="guidelineDetails">
-			<p>Some PHP functions return FALSE on failure, but may also have a valid return value of "" or 0, which would evaluate to FALSE in loose comparisons.  Be explicit by comparing the variable type when using these return values in conditionals to ensure the return value is indeed what you expect, and not a value that has an equivalent loose-type evaluation.</p>
-			<p>Use the same stringency in returning and checking your own variables.  Use <strong>===</strong> and <strong>!==</strong> as necessary.
-
-<code><strong>INCORRECT</strong>:
-// If 'foo' is at the beginning of the string, strpos will return a 0,
-// resulting in this conditional evaluating as TRUE
-if (strpos($str, 'foo') == FALSE)
-
-<strong>CORRECT</strong>:
-if (strpos($str, 'foo') === FALSE)
-</code>
-
-<code><strong>INCORRECT</strong>:
-function build_string($str = "")
-{
-	if ($str == "")	// uh-oh!  What if FALSE or the integer 0 is passed as an argument?
-	{
-
-	}
-}
-
-<strong>CORRECT</strong>:
-function build_string($str = "")
-{
-	if ($str === "")
-	{
-
-	}
-}</code>
-
-		<p>See also information regarding <a href="http://us3.php.net/manual/en/language.types.type-juggling.php#language.types.typecasting">typecasting</a>, which can be quite useful.  Typecasting has a slightly different effect which may be desirable.  When casting a variable as a string, for instance, NULL and boolean FALSE variables become empty strings, 0 (and other numbers) become strings of digits, and boolean TRUE becomes "1":</p>
-
-<code>$str = (string) $str;	// cast $str as a string</code>
-
-		</div>
-	
-	
-		<h2><a name="debugging_code"></a>Debugging Code</h2>
-		<div class="guidelineDetails">
-			<p>No debugging code can be left in place for submitted add-ons unless it is commented out, i.e. no var_dump(), print_r(), die(), and exit() calls that were used while creating the add-on, unless they are commented out.</p>
-
-<code>// print_r($foo);</code>
-		</div>
-	
-
-	
-		<h2><a name="whitespace_in_files"></a>Whitespace in Files</h2>
-		<div class="guidelineDetails">
-			<p>No whitespace can precede the opening PHP tag or follow the closing PHP tag.  ExpressionEngine output is buffered, so whitespace in your files can cause output to begin before ExpressionEngine outputs its content, leading to errors and an inability for ExpressionEngine to send proper headers.  In the examples below, select the text with your mouse to reveal the incorrect whitespace.</p>
-
-			<p><strong>INCORRECT</strong>:</p>
-<code>     
-&lt;?php
-	// ...there is whitespace and a linebreak above the opening PHP tag
-	// as well as whitespace after the closing PHP tag
-?&gt;    
-</code>
-			<p><strong>CORRECT</strong>:</p>
-<code>&lt;?php
-	// this sample has no whitespace before or after the opening and closing PHP tags
-?&gt;</code>
-
-		</div>
-	
-	
-		<h2><a name="compatibility"></a>Compatibility</h2>
-		<div class="guidelineDetails">
-			<p>Unless specifically mentioned in your add-on's documentation, all code must be compatible with PHP version 4.3+.  Additionally, do not use PHP functions that require non-default libraries to be installed unless your code contains an alternative method when the function is not available, or you implicitly document that your add-on requires said PHP libraries.</p>
-		</div>
-		
-
-	
-		<h2><a name="class_and_file_names_using_common_words"></a>Class and File Names using Common Words</h2>
-		<div class="guidelineDetails">
-			<p>When your class or filename is a common word, or might quite likely be identically named in another PHP script, provide a unique prefix to help prevent collision.  Always realize that your end users may be running other add-ons or third party PHP scripts.  Choose a prefix that is unique to your identity as a developer or company.</p>
-
-<code><strong>INCORRECT</strong>:
-class Email		pi.email.php
-class Xml		ext.xml.php
-class Import		mod.import.php
-
-<strong>CORRECT</strong>:
-class Pre_email		pi.pre_email.php
-class Pre_xml		ext.pre_xml.php
-class Pre_import	mod.pre_import.php
-</code>
-		</div>
-	
-	
-		<h2><a name="database_table_names"></a>Database Table Names</h2>
-		<div class="guidelineDetails">
-			<p>Any tables that your add-on might use must use the 'exp_' prefix, followed by a prefix uniquely identifying you as the developer or company, and then a short descriptive table name.  You do not need to be concerned about the database prefix being used on the user's installation, as ExpressionEngine's database class will automatically convert 'exp_' to what is actually being used.</p>
-
-<code><strong>INCORRECT</strong>:
-email_addresses		// missing both prefixes
-pre_email_addresses	// missing exp_ prefix
-exp_email_addresses	// missing unique prefix
-
-<strong>CORRECT</strong>:
-exp_pre_email_addresses
-</code>
-
-			<p class="important"><strong>NOTE:</strong> Be mindful that MySQL has a limit of 64 characters for table names.  This should not be an issue as table names that would exceed this would likely have unreasonable names.  For instance, the following table name exceeds this limitation by one character.  Silly, no? <strong>exp_pre_email_addresses_of_registered_users_in_seattle_washington</strong>
-		</div>
-	
-
-	
-		<h2><a name="one_file_per_class"></a>One File per Class</h2>
-		<div class="guidelineDetails">
-			<p>Use separate files for each class your add-on uses, unless the classes are <em>closely related</em>.  An example of ExpressionEngine files that contains multiple classes is the Database class file, which contains both the DB class and the DB_Cache class, and the Magpie plugin, which contains both the Magpie and Snoopy classes.</p>
-		</div>
-	
-
-	
-		<h2><a name="whitespace"></a>Whitespace</h2>
-		<div class="guidelineDetails">
-			<p>Use tabs for whitespace in your code, not spaces.  This may seem like a small thing, but using tabs instead of whitespace allows the developer looking at your code to have indentation at levels that they prefer and customize in whatever application they use.  And as a side benefit, it results in (slightly) more compact files, storing one tab character versus, say, four space characters.</p>
-		</div>
-	
-
-	
-		<h2><a name="line_breaks"></a>Line Breaks</h2>
-		<div class="guidelineDetails">
-			<p>Files must be saved with Unix line breaks.  This is more of an issue for developers who work in Windows, but in any case ensure that your text editor is setup to save files with Unix line breaks.</p>
-		</div>
-	
-
-	
-		<h2><a name="code_indenting"></a>Code Indenting</h2>
-		<div class="guidelineDetails">
-			<p>Use Allman style indenting.  With the exception of Class declarations, braces are always placed on a line by themselves, and indented at the same level as the control statement that "owns" them.</p>
-
-<code><strong>INCORRECT</strong>:
-function foo($bar) {
-	// ...
-}
-
-foreach ($arr as $key => $val) {
-	// ...
-}
-
-if ($foo == $bar) {
-	// ...
-} else {
-	// ...
-}
-
-for ($i = 0; $i &lt; 10; $i++)
-	{
-	for ($j = 0; $j &lt; 10; $j++)
-		{
-		// ...
-		}
-	}
-
-<strong>CORRECT</strong>:
-function foo($bar)
-{
-	// ...
-}
-
-foreach ($arr as $key => $val)
-{
-	// ...
-}
-
-if ($foo == $bar)
-{
-	// ...
-}
-else
-{
-	// ...
-}
-
-for ($i = 0; $i &lt; 10; $i++)
-{
-	for ($j = 0; $j &lt; 10; $j++)
-	{
-		// ...
-	}
-}</code>
-		</div>
-	
-
-	<h2><a name="bracket_spacing"></a>Bracket and Parenthetic Spacing</h2>
-		<div class="guidelineDetails">
-			<p>In general, parenthesis and brackets should not use any additional spaces.  The exception is that a space should always follow PHP control structures that accept arguments with parenthesis (declare, do-while, elseif, for, foreach, if, switch, while), to help distinguish them from functions and increase readability.</p>
-			
-<code>INCORRECT:
-$arr[ $foo ] = 'foo';
-
-CORRECT:
-$arr[$foo] = 'foo'; // no spaces around array keys
-
-
-INCORRECT:
-function foo ( $bar )
-{
-	
-}
-
-CORRECT:
-function foo($bar) // no spaces around parenthesis in function declarations
-{
-	
-}
-
-
-INCORRECT:
-foreach( $query->result() as $row )
-
-CORRECT:
-foreach ($query->result() as $row) // single space following PHP control structures, but not in interior parenthesis
-</code>
-		</div>
-	
-	
-	
-		<h2><a name="localized_text_in_control_panel"></a>Localized Text in Control Panel</h2>
-		<div class="guidelineDetails">
-			<p>Any text that is output in the control panel should use language variables in your module's lang file to allow localization.</p>
-
-<code>INCORRECT:
-return "Invalid Selection";
-
-CORRECT:
-return $LANG->line('invalid_selection');</code>
-		</div>
-	
-
-	
-		<h2><a name="private_methods_and_variables"></a>Private Methods and Variables</h2>
-		<div class="guidelineDetails">
-			<p>Methods and variables that are only accessed internally by your class, such as utility and helper functions that your public methods use for code abstraction, should be prefixed with an underscore.</p>
-
-<code>convert_text()		// public method
-_convert_text()		// private method</code>
-		</div>
-	
-
-	
-		<h2><a name="php_errors"></a>PHP Errors</h2>
-		<div class="guidelineDetails">
-			<p>Code must run error free and not rely on warnings and notices to be hidden to meet this requirement.  For instance, never access a variable that you did not set yourself (such as $_POST array keys) without first checking to see that it isset().</p>
-
-			<p>Make sure that while developing your add-on, error reporting is enabled for ALL users, and that display_errors is enabled in the PHP environment.  You can check this setting with:</p>
-
-<code>if (ini_get('display_errors') == 1)
-{
-	exit "Enabled";
-}</code>
-
-			<p>On some servers where display_errors is disabled, and you do not have the ability to change this in the php.ini, you can often enable it with:</p>
-
-<code>ini_set('display_errors', 1);</code>
-
-			<p class="important"><strong>NOTE:</strong> Setting the <a href="http://us.php.net/manual/en/ref.errorfunc.php#ini.display-errors">display_errors</a> setting with ini_set() at runtime is not identical to having it enabled in the PHP environment.  Namely, it will not have any effect if the script has fatal errors</p>
-		</div>
-	
-
-	
-		<h2><a name="short_open_tags"></a>Short Open Tags</h2>
-		<div class="guidelineDetails">
-			<p>Always use full PHP opening tags, in case a server does not have short_open_tag enabled.</p>
-
-<code><strong>INCORRECT</strong>:
-&lt;? echo $foo; ?&gt;
-
-&lt;?=$foo?&gt;
-
-<strong>CORRECT</strong>:
-&lt;?php echo $foo; ?&gt;</code>
-		</div>
-	
-
-	
-		<h2><a name="one_statement_per_line"></a>One Statement Per Line</h2>
-		<div class="guidelineDetails">
-			<p>Never combine statements on one line.</p>
-
-<code><strong>INCORRECT</strong>:
-$foo = 'this'; $bar = 'that'; $bat = str_replace($foo, $bar, $bag);
-
-<strong>CORRECT</strong>:
-$foo = 'this';
-$bar = 'that';
-$bat = str_replace($foo, $bar, $bag);
-</code>
-		</div>
-	
-
-	
-		<h2><a name="strings"></a>Strings</h2>
-		<div class="guidelineDetails">
-			<p>Always use single quoted strings unless you need variables parsed, and in cases where you do need variables parsed, use braces to prevent greedy token parsing.  You may also use double-quoted strings if the string contains single quotes, so you do not have to use escape characters.</p>
-
-<code><strong>INCORRECT</strong>:
-"My String"					// no variable parsing, so no use for double quotes
-"My string $foo"				// needs braces
-'SELECT foo FROM bar WHERE baz = \'bag\''	// ugly
-
-<strong>CORRECT</strong>:
-'My String'
-"My string {$foo}"
-"SELECT foo FROM bar WHERE baz = 'bag'"</code>
-		</div>
-	
-
-	
-		<h2><a name="sql_queries"></a>SQL Queries</h2>
-		<div class="guidelineDetails">
-			<p>MySQL keywords are always capitalized: SELECT, INSERT, UPDATE, WHERE, AS, JOIN, ON, IN, etc.</p>
-
-			<p>Break up long queries into multiple lines for legibility, preferably breaking for each clause.</p>
-
-<code><strong>INCORRECT</strong>:
-// keywords are lowercase and query is too long for
-// a single line (... indicates continuation of line)
-$query = $this->db->query("select foo, bar, baz, foofoo, foobar as raboof, foobaz from exp_pre_email_addresses
-...where foo != 'oof' and baz != 'zab' order by foobaz limit 5, 100");
-
-<strong>CORRECT</strong>:
-$query = $this->db->query("SELECT foo, bar, baz, foofoo, foobar AS raboof, foobaz
-				FROM exp_pre_email_addresses
-				WHERE foo != 'oof'
-				AND baz != 'zab'
-				ORDER BY foobaz
-				LIMIT 5, 100");</code>
-		</div>
-	
-
-	
-		<h2><a name="default_function_arguments"></a>Default Function Arguments</h2>
-		<div class="guidelineDetails">
-			<p>Whenever appropriate, provide function argument defaults, which helps prevent PHP errors with mistaken calls and provides common fallback values which can save a few lines of code. Example:</p>
-
-<code>function foo($bar = '', $baz = FALSE)</code>
-		</div>
-	
-
-	
-		<h2><a name="overlapping_tag_parameters"></a>Overlapping Tag Parameters</h2>
-		<div class="guidelineDetails">
-			<p>Avoid multiple tag parameters that have effect on the same thing.  For instance, instead of <strong>include=</strong> and <strong>exclude=</strong>, perhaps allow <strong>include=</strong> to handle the parameter alone, with the addition of "not", e.g. <strong>include="not bar"</strong>.  This will prevent problems of parameters overlapping or having to worry about which parameter has priority over another.</p>
-		</div>
-	
-
-</div>
-
-
-
-</div>
-<!-- END CONTENT -->
-
-
-<div id="footer">
-<p>
-Previous Topic:&nbsp;&nbsp;<a href="security.html">Security</a>
-&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
-<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
-<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
-Next Topic:&nbsp;&nbsp;<a href="../doc_style/index.html">Writing Documentation</a>
-</p>
-<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006-2008 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">Ellislab, Inc.</a></p>
-</div>
-
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Style Guide : CodeIgniter User Guide</title>
+
+<style type='text/css' media='all'>@import url('../userguide.css');</style>
+<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />
+
+<style type="text/css" media="screen">
+	code {
+		white-space: pre;
+	}
+</style>
+
+<script type="text/javascript" src="../nav/nav.js"></script>
+<script type="text/javascript" src="../nav/prototype.lite.js"></script>
+<script type="text/javascript" src="../nav/moo.fx.js"></script>
+<script type="text/javascript" src="../nav/user_guide_menu.js"></script>
+
+<meta http-equiv='expires' content='-1' />
+<meta http-equiv= 'pragma' content='no-cache' />
+<meta name='robots' content='all' />
+<meta name='author' content='ExpressionEngine Dev Team' />
+<meta name='description' content='CodeIgniter User Guide' />
+
+</head>
+<body>
+
+<!-- START NAVIGATION -->
+<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
+<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
+<div id="masthead">
+<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
+<tr>
+<td><h1>CodeIgniter User Guide Version 1.7</h1></td>
+<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
+</tr>
+</table>
+</div>
+<!-- END NAVIGATION -->
+
+
+<!-- START BREADCRUMB -->
+<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
+<tr>
+<td id="breadcrumb">
+<a href="http://codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
+<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
+Style Guide
+</td>
+<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
+</tr>
+</table>
+<!-- END BREADCRUMB -->
+
+<br clear="all" />
+
+
+<!-- START CONTENT -->
+<div id="content">
+
+
+<h1>General Style and Syntax</h1>
+
+<p>The following page describes the coding rules use adhere to when developing CodeIgniter.</p>
+
+
+<h2>Table of Contents</h2>
+<ul class="minitoc">
+	<li><a href="#php_closing_tag">PHP Closing Tag</a></li>
+	<li><a href="#class_and_method_naming">Class and Method Naming</a></li>
+	<li><a href="#variable_names">Variable Names</a></li>
+	<li><a href="#commenting">Commenting</a></li>
+	<li><a href="#constants">Constants</a></li>
+	<li><a href="#true_false_and_null">TRUE, FALSE, and NULL</a></li>
+	<li><a href="#logical_operators">Logical Operators</a></li>
+	<li><a href="#comparing_return_values_and_typecasting">Comparing Return Values and Typecasting</a></li>
+	<li><a href="#debugging_code">Debugging Code</a></li>
+	<li><a href="#whitespace_in_files">Whitespace in Files</a></li>
+	<li><a href="#compatibility">Compatibility</a></li>
+	<li><a href="#class_and_file_names_using_common_words">Class and File Names using Common Words</a></li>
+	<li><a href="#database_table_names">Database Table Names</a></li>
+	<li><a href="#one_file_per_class">One File per Class</a></li>
+	<li><a href="#whitespace">Whitespace</a></li>
+	<li><a href="#line_breaks">Line Breaks</a></li>
+	<li><a href="#code_indenting">Code Indenting</a></li>
+	<li><a href="#bracket_spacing">Bracket and Parenthetic Spacing</li>
+	<li><a href="#localized_text_in_control_panel">Localized Text in Control Panel</a></li>
+	<li><a href="#private_methods_and_variables">Private Methods and Variables</a></li>
+	<li><a href="#php_errors">PHP Errors</a></li>
+	<li><a href="#short_open_tags">Short Open Tags</a></li>
+	<li><a href="#one_statement_per_line">One Statement Per Line</a></li>
+	<li><a href="#strings">Strings</a></li>
+	<li><a href="#sql_queries">SQL Queries</a></li>
+	<li><a href="#default_function_arguments">Default Function Arguments</a></li>
+	<li><a href="#overlapping_tag_parameters">Overlapping Tag Parameters</a></li>
+</ul>
+
+		<h2><a name="php_closing_tag"></a>PHP Closing Tag</h2>
+		<div class="guidelineDetails">
+			<p>The PHP closing tag on a PHP document <strong>?&gt;</strong> is optional to the PHP parser.  However, if used, any whitespace following the closing tag, whether introduced 
+				by the developer, user, or an FTP application, can cause unwanted output, PHP errors, or if the latter are suppressed, blank pages.  For this reason, all PHP files should
+				<strong>OMIT</strong> the closing PHP tag, and instead use a comment block to mark the end of file and it's location relative to the application root.
+				This allows you to still identify a file as being complete and not truncated.</p>
+<code><strong>INCORRECT</strong>:
+&lt;?php
+
+echo "Here's my code!";
+
+?&gt;
+
+<strong>CORRECT</strong>:
+&lt;?php
+
+echo "Here's my code!";
+
+/* End of file myfile.php */
+/* Location: ./system/modules/mymodule/myfile.php */
+</code>
+		</div>
+
+	
+		<h2><a name="class_and_method_naming"></a>Class and Method Naming</h2>
+		<div class="guidelineDetails">
+			<p>Class names should always have their first letter uppercase, and the constructor method should match identically.  Multiple words should be separated with an underscore, and not CamelCased.  All other class methods should be entirely lowercased and named to clearly indicate their function, preferably including a verb.  Try to avoid overly long and verbose names.</p>
+
+	<code><strong>INCORRECT</strong>:
+class superclass
+class SuperClass
+
+<strong>CORRECT</strong>:
+class Super_class</code>
+
+			<p>Notice that the Class and constructor methods are identically named and cased:</p>
+
+	<code>class Super_class {
+
+	function Super_class()
+	{
+
+	}
+}</code>
+
+			<p>Examples of improper and proper method naming:</p>
+
+	<code><strong>INCORRECT</strong>:
+function fileproperties()		// not descriptive and needs underscore separator
+function fileProperties()		// not descriptive and uses CamelCase
+function getfileproperties()		// Better!  But still missing underscore separator
+function getFileProperties()		// uses CamelCase
+function get_the_file_properties_from_the_file()	// wordy
+
+<strong>CORRECT</strong>:
+function get_file_properties()	// descriptive, underscore separator, and all lowercase letters</code>
+
+		</div>
+	
+	
+		<h2><a name="variable_names"></a>Variable Names</h2>
+		<div class="guidelineDetails">
+			<p>The guidelines for variable naming is very similar to that used for class methods.  Namely, variables should contain only lowercase letters, use underscore separators, and be reasonably named to indicate their purpose and contents. Very short, non-word variables should only be used as iterators in for() loops.</p>
+<code><strong>INCORRECT</strong>:
+$j = &apos;foo&apos;;		// single letter variables should only be used in for() loops
+$Str			// contains uppercase letters
+$bufferedText		// uses CamelCasing, and could be shortened without losing semantic meaning
+$groupid		// multiple words, needs underscore separator
+$name_of_last_city_used	// too long
+
+<strong>CORRECT</strong>:
+for ($j = 0; $j &lt; 10; $j++)
+$str
+$buffer
+$group_id
+$last_city
+</code>
+		</div>
+	
+	
+		<h2><a name="commenting"></a>Commenting</h2>
+		<div class="guidelineDetails">
+			<p>In general, code should be commented prolifically.  It not only helps describe the flow and intent of the code for less experienced programmers, but can prove invaluable when returning to your own code months down the line.  There is not a required format for comments, but the following are recommended.</p>
+
+			<p><a href="http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html#basics.docblock">DocBlock</a> style comments preceding class and method declarations so they can be picked up by IDEs:</p>
+
+<code>/**
+ * Super Class
+ *
+ * @package	Package Name
+ * @subpackage	Subpackage
+ * @category	Category
+ * @author	Author Name
+ * @link	http://example.com
+ */
+class Super_class {</code>
+
+<code>/**
+ * Encodes string for use in XML
+ *
+ * @access	public
+ * @param	string
+ * @return	string
+ */
+function xml_encode($str)</code>
+
+			<p>Use single line comments within code, leaving a blank line between large comment blocks and code.</p>
+
+<code>// break up the string by newlines
+$parts = explode("\n", $str);
+
+// A longer comment that needs to give greater detail on what is
+// occurring and why can use multiple single-line comments.  Try to
+// keep the width reasonable, around 70 characters is the easiest to
+// read.  Don't hesitate to link to permanent external resources
+// that may provide greater detail:
+//
+// http://example.com/information_about_something/in_particular/
+
+$parts = $this->foo($parts);
+</code>
+		</div>
+	
+	
+		<h2><a name="constants"></a>Constants</h2>
+		<div class="guidelineDetails">
+			<p>Constants follow the same guidelines as do variables, except constants should always be fully uppercase.  <em>Always use ExpressionEngine constants when appropriate, i.e. SLASH, LD, RD, PATH_CACHE, etc.</em></p>
+<code><strong>INCORRECT</strong>:
+myConstant	// missing underscore separator and not fully uppercase
+N		// no single-letter constants
+S_C_VER		// not descriptive
+$str = str_replace('{foo}', 'bar', $str);	// should use LD and RD constants
+
+<strong>CORRECT</strong>:
+MY_CONSTANT
+NEWLINE
+SUPER_CLASS_VERSION
+$str = str_replace(LD.'foo'.RD, 'bar', $str);
+</code>
+		</div>
+	
+	
+		<h2><a name="true_false_and_null"></a>TRUE, FALSE, and NULL</h2>
+		<div class="guidelineDetails">
+			<p><strong>TRUE</strong>, <strong>FALSE</strong>, and <strong>NULL</strong> keywords should always be fully uppercase.</p>
+<code><strong>INCORRECT</strong>:
+if ($foo == true)
+$bar = false;
+function foo($bar = null)
+
+<strong>CORRECT</strong>:
+if ($foo == TRUE)
+$bar = FALSE;
+function foo($bar = NULL)</code>
+		</div>
+	
+
+	
+		<h2><a name="logical_operators"></a>Logical Operators</h2>
+		<div class="guidelineDetails">
+			<p>Use of <strong>||</strong> is discouraged as its clarity on some output devices is low (looking like the number 11 for instance).
+				<strong>&amp;&amp;</strong> is preferred over <strong>AND</strong> but either are acceptable, and a space should always precede and follow <strong>!</strong>.</p>
+<code><strong>INCORRECT</strong>:
+if ($foo || $bar)
+if ($foo AND $bar)  // okay but not recommended for common syntax highlighting applications
+if (!$foo)
+if (! is_array($foo))
+
+<strong>CORRECT</strong>:
+if ($foo OR $bar)
+if ($foo && $bar) // recommended
+if ( ! $foo)
+if ( ! is_array($foo))
+</code>
+		</div>
+	
+	
+	
+		<h2><a name="comparing_return_values_and_typecasting"></a>Comparing Return Values and Typecasting</h2>
+		<div class="guidelineDetails">
+			<p>Some PHP functions return FALSE on failure, but may also have a valid return value of "" or 0, which would evaluate to FALSE in loose comparisons.  Be explicit by comparing the variable type when using these return values in conditionals to ensure the return value is indeed what you expect, and not a value that has an equivalent loose-type evaluation.</p>
+			<p>Use the same stringency in returning and checking your own variables.  Use <strong>===</strong> and <strong>!==</strong> as necessary.
+
+<code><strong>INCORRECT</strong>:
+// If 'foo' is at the beginning of the string, strpos will return a 0,
+// resulting in this conditional evaluating as TRUE
+if (strpos($str, 'foo') == FALSE)
+
+<strong>CORRECT</strong>:
+if (strpos($str, 'foo') === FALSE)
+</code>
+
+<code><strong>INCORRECT</strong>:
+function build_string($str = "")
+{
+	if ($str == "")	// uh-oh!  What if FALSE or the integer 0 is passed as an argument?
+	{
+
+	}
+}
+
+<strong>CORRECT</strong>:
+function build_string($str = "")
+{
+	if ($str === "")
+	{
+
+	}
+}</code>
+
+		<p>See also information regarding <a href="http://us3.php.net/manual/en/language.types.type-juggling.php#language.types.typecasting">typecasting</a>, which can be quite useful.  Typecasting has a slightly different effect which may be desirable.  When casting a variable as a string, for instance, NULL and boolean FALSE variables become empty strings, 0 (and other numbers) become strings of digits, and boolean TRUE becomes "1":</p>
+
+<code>$str = (string) $str;	// cast $str as a string</code>
+
+		</div>
+	
+	
+		<h2><a name="debugging_code"></a>Debugging Code</h2>
+		<div class="guidelineDetails">
+			<p>No debugging code can be left in place for submitted add-ons unless it is commented out, i.e. no var_dump(), print_r(), die(), and exit() calls that were used while creating the add-on, unless they are commented out.</p>
+
+<code>// print_r($foo);</code>
+		</div>
+	
+
+	
+		<h2><a name="whitespace_in_files"></a>Whitespace in Files</h2>
+		<div class="guidelineDetails">
+			<p>No whitespace can precede the opening PHP tag or follow the closing PHP tag.  ExpressionEngine output is buffered, so whitespace in your files can cause output to begin before ExpressionEngine outputs its content, leading to errors and an inability for ExpressionEngine to send proper headers.  In the examples below, select the text with your mouse to reveal the incorrect whitespace.</p>
+
+			<p><strong>INCORRECT</strong>:</p>
+<code>     
+&lt;?php
+	// ...there is whitespace and a linebreak above the opening PHP tag
+	// as well as whitespace after the closing PHP tag
+?&gt;    
+</code>
+			<p><strong>CORRECT</strong>:</p>
+<code>&lt;?php
+	// this sample has no whitespace before or after the opening and closing PHP tags
+?&gt;</code>
+
+		</div>
+	
+	
+		<h2><a name="compatibility"></a>Compatibility</h2>
+		<div class="guidelineDetails">
+			<p>Unless specifically mentioned in your add-on's documentation, all code must be compatible with PHP version 4.3+.  Additionally, do not use PHP functions that require non-default libraries to be installed unless your code contains an alternative method when the function is not available, or you implicitly document that your add-on requires said PHP libraries.</p>
+		</div>
+		
+
+	
+		<h2><a name="class_and_file_names_using_common_words"></a>Class and File Names using Common Words</h2>
+		<div class="guidelineDetails">
+			<p>When your class or filename is a common word, or might quite likely be identically named in another PHP script, provide a unique prefix to help prevent collision.  Always realize that your end users may be running other add-ons or third party PHP scripts.  Choose a prefix that is unique to your identity as a developer or company.</p>
+
+<code><strong>INCORRECT</strong>:
+class Email		pi.email.php
+class Xml		ext.xml.php
+class Import		mod.import.php
+
+<strong>CORRECT</strong>:
+class Pre_email		pi.pre_email.php
+class Pre_xml		ext.pre_xml.php
+class Pre_import	mod.pre_import.php
+</code>
+		</div>
+	
+	
+		<h2><a name="database_table_names"></a>Database Table Names</h2>
+		<div class="guidelineDetails">
+			<p>Any tables that your add-on might use must use the 'exp_' prefix, followed by a prefix uniquely identifying you as the developer or company, and then a short descriptive table name.  You do not need to be concerned about the database prefix being used on the user's installation, as ExpressionEngine's database class will automatically convert 'exp_' to what is actually being used.</p>
+
+<code><strong>INCORRECT</strong>:
+email_addresses		// missing both prefixes
+pre_email_addresses	// missing exp_ prefix
+exp_email_addresses	// missing unique prefix
+
+<strong>CORRECT</strong>:
+exp_pre_email_addresses
+</code>
+
+			<p class="important"><strong>NOTE:</strong> Be mindful that MySQL has a limit of 64 characters for table names.  This should not be an issue as table names that would exceed this would likely have unreasonable names.  For instance, the following table name exceeds this limitation by one character.  Silly, no? <strong>exp_pre_email_addresses_of_registered_users_in_seattle_washington</strong>
+		</div>
+	
+
+	
+		<h2><a name="one_file_per_class"></a>One File per Class</h2>
+		<div class="guidelineDetails">
+			<p>Use separate files for each class your add-on uses, unless the classes are <em>closely related</em>.  An example of ExpressionEngine files that contains multiple classes is the Database class file, which contains both the DB class and the DB_Cache class, and the Magpie plugin, which contains both the Magpie and Snoopy classes.</p>
+		</div>
+	
+
+	
+		<h2><a name="whitespace"></a>Whitespace</h2>
+		<div class="guidelineDetails">
+			<p>Use tabs for whitespace in your code, not spaces.  This may seem like a small thing, but using tabs instead of whitespace allows the developer looking at your code to have indentation at levels that they prefer and customize in whatever application they use.  And as a side benefit, it results in (slightly) more compact files, storing one tab character versus, say, four space characters.</p>
+		</div>
+	
+
+	
+		<h2><a name="line_breaks"></a>Line Breaks</h2>
+		<div class="guidelineDetails">
+			<p>Files must be saved with Unix line breaks.  This is more of an issue for developers who work in Windows, but in any case ensure that your text editor is setup to save files with Unix line breaks.</p>
+		</div>
+	
+
+	
+		<h2><a name="code_indenting"></a>Code Indenting</h2>
+		<div class="guidelineDetails">
+			<p>Use Allman style indenting.  With the exception of Class declarations, braces are always placed on a line by themselves, and indented at the same level as the control statement that "owns" them.</p>
+
+<code><strong>INCORRECT</strong>:
+function foo($bar) {
+	// ...
+}
+
+foreach ($arr as $key => $val) {
+	// ...
+}
+
+if ($foo == $bar) {
+	// ...
+} else {
+	// ...
+}
+
+for ($i = 0; $i &lt; 10; $i++)
+	{
+	for ($j = 0; $j &lt; 10; $j++)
+		{
+		// ...
+		}
+	}
+
+<strong>CORRECT</strong>:
+function foo($bar)
+{
+	// ...
+}
+
+foreach ($arr as $key => $val)
+{
+	// ...
+}
+
+if ($foo == $bar)
+{
+	// ...
+}
+else
+{
+	// ...
+}
+
+for ($i = 0; $i &lt; 10; $i++)
+{
+	for ($j = 0; $j &lt; 10; $j++)
+	{
+		// ...
+	}
+}</code>
+		</div>
+	
+
+	<h2><a name="bracket_spacing"></a>Bracket and Parenthetic Spacing</h2>
+		<div class="guidelineDetails">
+			<p>In general, parenthesis and brackets should not use any additional spaces.  The exception is that a space should always follow PHP control structures that accept arguments with parenthesis (declare, do-while, elseif, for, foreach, if, switch, while), to help distinguish them from functions and increase readability.</p>
+			
+<code>INCORRECT:
+$arr[ $foo ] = 'foo';
+
+CORRECT:
+$arr[$foo] = 'foo'; // no spaces around array keys
+
+
+INCORRECT:
+function foo ( $bar )
+{
+	
+}
+
+CORRECT:
+function foo($bar) // no spaces around parenthesis in function declarations
+{
+	
+}
+
+
+INCORRECT:
+foreach( $query->result() as $row )
+
+CORRECT:
+foreach ($query->result() as $row) // single space following PHP control structures, but not in interior parenthesis
+</code>
+		</div>
+	
+	
+	
+		<h2><a name="localized_text_in_control_panel"></a>Localized Text in Control Panel</h2>
+		<div class="guidelineDetails">
+			<p>Any text that is output in the control panel should use language variables in your module's lang file to allow localization.</p>
+
+<code>INCORRECT:
+return "Invalid Selection";
+
+CORRECT:
+return $LANG->line('invalid_selection');</code>
+		</div>
+	
+
+	
+		<h2><a name="private_methods_and_variables"></a>Private Methods and Variables</h2>
+		<div class="guidelineDetails">
+			<p>Methods and variables that are only accessed internally by your class, such as utility and helper functions that your public methods use for code abstraction, should be prefixed with an underscore.</p>
+
+<code>convert_text()		// public method
+_convert_text()		// private method</code>
+		</div>
+	
+
+	
+		<h2><a name="php_errors"></a>PHP Errors</h2>
+		<div class="guidelineDetails">
+			<p>Code must run error free and not rely on warnings and notices to be hidden to meet this requirement.  For instance, never access a variable that you did not set yourself (such as $_POST array keys) without first checking to see that it isset().</p>
+
+			<p>Make sure that while developing your add-on, error reporting is enabled for ALL users, and that display_errors is enabled in the PHP environment.  You can check this setting with:</p>
+
+<code>if (ini_get('display_errors') == 1)
+{
+	exit "Enabled";
+}</code>
+
+			<p>On some servers where display_errors is disabled, and you do not have the ability to change this in the php.ini, you can often enable it with:</p>
+
+<code>ini_set('display_errors', 1);</code>
+
+			<p class="important"><strong>NOTE:</strong> Setting the <a href="http://us.php.net/manual/en/ref.errorfunc.php#ini.display-errors">display_errors</a> setting with ini_set() at runtime is not identical to having it enabled in the PHP environment.  Namely, it will not have any effect if the script has fatal errors</p>
+		</div>
+	
+
+	
+		<h2><a name="short_open_tags"></a>Short Open Tags</h2>
+		<div class="guidelineDetails">
+			<p>Always use full PHP opening tags, in case a server does not have short_open_tag enabled.</p>
+
+<code><strong>INCORRECT</strong>:
+&lt;? echo $foo; ?&gt;
+
+&lt;?=$foo?&gt;
+
+<strong>CORRECT</strong>:
+&lt;?php echo $foo; ?&gt;</code>
+		</div>
+	
+
+	
+		<h2><a name="one_statement_per_line"></a>One Statement Per Line</h2>
+		<div class="guidelineDetails">
+			<p>Never combine statements on one line.</p>
+
+<code><strong>INCORRECT</strong>:
+$foo = 'this'; $bar = 'that'; $bat = str_replace($foo, $bar, $bag);
+
+<strong>CORRECT</strong>:
+$foo = 'this';
+$bar = 'that';
+$bat = str_replace($foo, $bar, $bag);
+</code>
+		</div>
+	
+
+	
+		<h2><a name="strings"></a>Strings</h2>
+		<div class="guidelineDetails">
+			<p>Always use single quoted strings unless you need variables parsed, and in cases where you do need variables parsed, use braces to prevent greedy token parsing.  You may also use double-quoted strings if the string contains single quotes, so you do not have to use escape characters.</p>
+
+<code><strong>INCORRECT</strong>:
+"My String"					// no variable parsing, so no use for double quotes
+"My string $foo"				// needs braces
+'SELECT foo FROM bar WHERE baz = \'bag\''	// ugly
+
+<strong>CORRECT</strong>:
+'My String'
+"My string {$foo}"
+"SELECT foo FROM bar WHERE baz = 'bag'"</code>
+		</div>
+	
+
+	
+		<h2><a name="sql_queries"></a>SQL Queries</h2>
+		<div class="guidelineDetails">
+			<p>MySQL keywords are always capitalized: SELECT, INSERT, UPDATE, WHERE, AS, JOIN, ON, IN, etc.</p>
+
+			<p>Break up long queries into multiple lines for legibility, preferably breaking for each clause.</p>
+
+<code><strong>INCORRECT</strong>:
+// keywords are lowercase and query is too long for
+// a single line (... indicates continuation of line)
+$query = $this->db->query("select foo, bar, baz, foofoo, foobar as raboof, foobaz from exp_pre_email_addresses
+...where foo != 'oof' and baz != 'zab' order by foobaz limit 5, 100");
+
+<strong>CORRECT</strong>:
+$query = $this->db->query("SELECT foo, bar, baz, foofoo, foobar AS raboof, foobaz
+				FROM exp_pre_email_addresses
+				WHERE foo != 'oof'
+				AND baz != 'zab'
+				ORDER BY foobaz
+				LIMIT 5, 100");</code>
+		</div>
+	
+
+	
+		<h2><a name="default_function_arguments"></a>Default Function Arguments</h2>
+		<div class="guidelineDetails">
+			<p>Whenever appropriate, provide function argument defaults, which helps prevent PHP errors with mistaken calls and provides common fallback values which can save a few lines of code. Example:</p>
+
+<code>function foo($bar = '', $baz = FALSE)</code>
+		</div>
+	
+
+	
+		<h2><a name="overlapping_tag_parameters"></a>Overlapping Tag Parameters</h2>
+		<div class="guidelineDetails">
+			<p>Avoid multiple tag parameters that have effect on the same thing.  For instance, instead of <strong>include=</strong> and <strong>exclude=</strong>, perhaps allow <strong>include=</strong> to handle the parameter alone, with the addition of "not", e.g. <strong>include="not bar"</strong>.  This will prevent problems of parameters overlapping or having to worry about which parameter has priority over another.</p>
+		</div>
+	
+
+</div>
+
+
+
+</div>
+<!-- END CONTENT -->
+
+
+<div id="footer">
+<p>
+Previous Topic:&nbsp;&nbsp;<a href="security.html">Security</a>
+&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+Next Topic:&nbsp;&nbsp;<a href="../doc_style/index.html">Writing Documentation</a>
+</p>
+<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006-2008 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">Ellislab, Inc.</a></p>
+</div>
+
+</body>
 </html>
\ No newline at end of file
